import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class symulacja
 */
@WebServlet("/symulacja")
public class symulacja extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public symulacja() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesja = request.getSession(true);
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		if(sesja.getAttribute("log")!=null && sesja.getAttribute("log").equals("admin")){
		out.write("<script type='text/javascript' src='js/symulacja.js'></script>");
		out.write("Symulacja transportu przesyłek.<br><br>Wybierz rodzaj symulacji:");
		out.write("<table><tr><td>Wyślij przesyłki z oddziałów pomocniczych do oddziałów głównych.</td><td><input type=button value=Wybierz id='but1' onClick=fun1();></td></tr>");
		out.write("<td>Wyślij przesyłki z oddziałów głównych do centrum dystrybucyjnego.</td><td><input type=button value=Wybierz id=but2 onClick=fun2();></td></tr>");
		out.write("<td>Wyślij przesyłki z centrum dystrybucyjnego do oddziałów głównych.</td><td><input type=button value=Wybierz id=but3 onClick=fun3();></td></tr></table>");
		out.write("<br><table><tr><td><input type=button value='Wyczyść stronę' id=4 onClick=czysc();></td><td><input type=button value='Wróć do głównej' id=4 onClick=wroc();></td></tr><table><br><hr>");
		out.write("<div id=wynik></div>");
		}
		else{
			out.write("Nie masz uprawnień do oglądania tej strony. Wróć na stronę główną: <a href=index.jsp>Strona główna</a>");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		request.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		HttpSession sesja = request.getSession(true);
		ArrayList zamowienia = new ArrayList();
		ArrayList oddzialy_glowne = new ArrayList();
		int i,j=0;
		int query;
		if(sesja.getAttribute("log")!=null && sesja.getAttribute("log").equals("admin") && request.getParameter("funkcja")!=null && request.getParameter("funkcja").equals("doglownej")){
			try {
				Connection con =mb.commons.DbConnection.getConnection();
				Statement stmt = con.createStatement();
				ResultSet rs = stmt.executeQuery("SELECT * from zamowienia where status like 'przyjeto'");
				int id=0, kod=0, pozycja=0;
				if(!rs.first()) out.write("Brak elementów do zmiany!<br>");
				else{
					rs.previous();
					//WCZYTANIE PACZEK KTÓRE BYŁY DOPIERO CO NADANE
					out.write("Nowe paczki będące dopiero co nadane:<br/><br/>");
					out.write("<table style='border: 1px solid;text-align:center'>");
					out.write("<tr bgcolor='#AAAAAA' ><td style='border: 1px solid;' width=150px; >ID_zamówienia</td><td style='border: 1px solid;' width=150px;>ID_paczki</td><td style='border: 1px solid;' width=150px;>ID_kuriera</td><td style='border: 1px solid;' width=150px;>Pozycja</td><td style='border: 1px solid;' width=150px;>Status</td><td style='border: 1px solid;' width=150px;>Uwagi</td>");
					while(rs.next()){
						  out.write("<tr>");
						  out.write("<td style='border: 1px solid;'>"+rs.getInt("id_zamowienia")+"</td>");
						  out.write("<td style='border: 1px solid;'>"+rs.getInt("id_paczki")+"</td>");
						  zamowienia.add(rs.getInt("id_zamowienia"));
						  zamowienia.add(rs.getInt("id_paczki"));
						  if(rs.getInt("id_kuriera")==0) out.write("<td style='border: 1px solid;'>nieokreślone</td>");
						  else out.write("<td style='border: 1px solid;' onclick=kurier();>"+rs.getInt("id_kuriera")+"</td>");
						  if(rs.getInt("pozycja")==0) out.write("<td style='border: 1px solid;'>nieokreślona</td>");
						  else out.write("<td style='border: 1px solid;'>"+rs.getInt("pozycja")+"</td>");
						  out.write("<td style='border: 1px solid;'>"+rs.getString("status")+"</td>");
						  if(rs.getString("uwagi")==null) out.write("<td style='border: 1px solid;'>brak</td>");
						  else out.write("<td style='border: 1px solid;'>"+rs.getString("uwagi")+"</td>");
						  out.write("</tr>");					  
					}	
					out.write("</table>");
					//ZMIANA STATUSU ORAZ PRZETRANSPORTOWANIE PACZEK DO ODDZIALU GLOWNEGO DLA REGIONU
					rs = stmt.executeQuery("SELECT id from oddzialy where nadrzedny=1");
					while(rs.next()){
						oddzialy_glowne.add(rs.getInt("id"));
					}
					for(i=0;i<zamowienia.size();i+=2){
						rs = stmt.executeQuery("SELECT pozycja from zamowienia where id_zamowienia='"+zamowienia.get(i)+"';");
						while(rs.next()){
							pozycja=rs.getInt("pozycja");
						}
						if(!oddzialy_glowne.contains(pozycja)) {
							rs = stmt.executeQuery("SELECT nadrzedny from oddzialy where id='"+pozycja+"';");
							while(rs.next()){
								j=rs.getInt("nadrzedny");
							}	
							query = stmt.executeUpdate("UPDATE `kurier`.`zamowienia` SET `pozycja` = '"+j+"' WHERE `id_zamowienia`= '"+zamowienia.get(i)+"';");
						}
						query = stmt.executeUpdate("UPDATE `kurier`.`zamowienia` SET `status` = 'w trakcie dostarczania' WHERE `id_zamowienia`= '"+zamowienia.get(i)+"';");
					}
					//WYPISANIE DOKONANYCH ZMIAN 
					out.write("</br></br>Dokonano zmian:</br>");
					out.write("<table style='border: 1px solid;text-align:center'>");	
					out.write("<tr bgcolor='#AAAAAA' ><td style='border: 1px solid;' width=150px; >ID_zamówienia</td><td style='border: 1px solid;' width=150px;>ID_paczki</td><td style='border: 1px solid;' width=150px;>ID_kuriera</td><td style='border: 1px solid;' width=150px;>Pozycja</td><td style='border: 1px solid;' width=150px;>Status</td><td style='border: 1px solid;' width=150px;>Uwagi</td>");
					for(i=0;i<zamowienia.size();i+=2){
						rs = stmt.executeQuery("SELECT * from zamowienia where id_zamowienia='"+zamowienia.get(i)+"';");
						while(rs.next()){
							out.write("<tr>");
							out.write("<td style='border: 1px solid;'>"+rs.getInt("id_zamowienia")+"</td>");
							out.write("<td style='border: 1px solid;'>"+rs.getInt("id_paczki")+"</td>");
							if(rs.getInt("id_kuriera")==0) out.write("<td style='border: 1px solid;'>nieokreślone</td>");
							else out.write("<td style='border: 1px solid;' onclick=kurier();>"+rs.getInt("id_kuriera")+"</td>");
							out.write("<td style='border: 1px solid;'>"+rs.getInt("pozycja")+"</td>");
							out.write("<td style='border: 1px solid;'>"+rs.getString("status")+"</td>");
							if(rs.getString("uwagi")==null) out.write("<td style='border: 1px solid;'>brak</td>");
							else out.write("<td style='border: 1px solid;'>"+rs.getString("uwagi")+"</td>");
							out.write("</tr>");
						}						
					}
					out.write("</table>");
				}	  
			} catch (SQLException e) {
				out.write("Wystąpił błąd:<br/>");
				out.write(e.toString());
				e.printStackTrace();
			}
		}
		else if(sesja.getAttribute("log")!=null && sesja.getAttribute("log").equals("admin") && request.getParameter("funkcja")!=null && request.getParameter("funkcja").equals("docentrum")){
			try {
					Connection con =mb.commons.DbConnection.getConnection();
					Statement stmt = con.createStatement();
					ResultSet rs = stmt.executeQuery("SELECT z . * FROM zamowienia z, oddzialy o WHERE STATUS LIKE 'w trakcie dostarczania' AND z.pozycja = o.id AND o.nadrzedny =1");
					if(!rs.first()) out.write("Brak elementów do zmiany!<br>");
					else{
						rs.previous();
						//WYPISANIE PACZEK KTÓRE SĄ WYSYŁANE DO CENTRUM DYSTRYBUCJI
						out.write("Paczki będące w trakcie dostarczania do Centrum dystrybucji i magazynowania:<br/><br/>");
						out.write("<table style='border: 1px solid;text-align:center'>");
						out.write("<tr bgcolor='#AAAAAA' ><td style='border: 1px solid;' width=150px; >ID_zamówienia</td><td style='border: 1px solid;' width=150px;>ID_paczki</td><td style='border: 1px solid;' width=150px;>ID_kuriera</td><td style='border: 1px solid;' width=150px;>Pozycja</td><td style='border: 1px solid;' width=150px;>Status</td><td style='border: 1px solid;' width=150px;>Uwagi</td>");
						while(rs.next()){
							  out.write("<tr>");
							  out.write("<td style='border: 1px solid;'>"+rs.getInt("id_zamowienia")+"</td>");
							  out.write("<td style='border: 1px solid;'>"+rs.getInt("id_paczki")+"</td>");
							  zamowienia.add(rs.getInt("id_zamowienia"));
							  zamowienia.add(rs.getInt("id_paczki"));
							  if(rs.getInt("id_kuriera")==0) out.write("<td style='border: 1px solid;'>nieokreślone</td>");
							  else out.write("<td style='border: 1px solid;' onclick=kurier();>"+rs.getInt("id_kuriera")+"</td>");
							  out.write("<td style='border: 1px solid;'>"+rs.getInt("pozycja")+"</td>");
							  out.write("<td style='border: 1px solid;'>"+rs.getString("status")+"</td>");
							  if(rs.getString("uwagi")==null) out.write("<td style='border: 1px solid;'>brak</td>");
							  else out.write("<td style='border: 1px solid;'>"+rs.getString("uwagi")+"</td>");
							  out.write("</tr>");			
						}	
						out.write("</table>");
						//ZMIANA POZYCJI NA CENTRUM DYSTRYBUCJI
						for(i=0;i<zamowienia.size();i+=2){
							query = stmt.executeUpdate("UPDATE `kurier`.`zamowienia` SET `pozycja` = '1' WHERE `id_zamowienia`= '"+zamowienia.get(i)+"';");
						}
						//WYPISANIE DOKONANYCH ZMIAN
						out.write("</br></br>Dokonano zmian:</br>");
						out.write("<table style='border: 1px solid;text-align:center'>");	
						out.write("<tr bgcolor='#AAAAAA' ><td style='border: 1px solid;' width=150px; >ID_zamówienia</td><td style='border: 1px solid;' width=150px;>ID_paczki</td><td style='border: 1px solid;' width=150px;>ID_kuriera</td><td style='border: 1px solid;' width=150px;>Pozycja</td><td style='border: 1px solid;' width=150px;>Status</td><td style='border: 1px solid;' width=150px;>Uwagi</td>");
						for(i=0;i<zamowienia.size();i+=2){
							rs = stmt.executeQuery("SELECT * from zamowienia where id_zamowienia='"+zamowienia.get(i)+"';");
							while(rs.next()){
								out.write("<tr>");
								out.write("<td style='border: 1px solid;'>"+rs.getInt("id_zamowienia")+"</td>");
								out.write("<td style='border: 1px solid;'>"+rs.getInt("id_paczki")+"</td>");
								if(rs.getInt("id_kuriera")==0) out.write("<td style='border: 1px solid;'>nieokreślone</td>");
								else out.write("<td style='border: 1px solid;' onclick=kurier();>"+rs.getInt("id_kuriera")+"</td>");
								out.write("<td style='border: 1px solid;'>"+rs.getInt("pozycja")+"</td>");
								out.write("<td style='border: 1px solid;'>"+rs.getString("status")+"</td>");
								if(rs.getString("uwagi")==null) out.write("<td style='border: 1px solid;'>brak</td>");
								else out.write("<td style='border: 1px solid;'>"+rs.getString("uwagi")+"</td>");
								out.write("</tr>");
							}						
						}
						out.write("</table>");						
					}	
					
			} catch (SQLException e) {
				out.write("Wystąpił błąd:<br/>");
				out.write(e.toString());
				e.printStackTrace();
			} 
		}
		else if(sesja.getAttribute("log")!=null && sesja.getAttribute("log").equals("admin") && request.getParameter("funkcja")!=null && request.getParameter("funkcja").equals("odcentrum")){
			try {
					Connection con =mb.commons.DbConnection.getConnection();
					Statement stmt = con.createStatement();
					ResultSet rs = stmt.executeQuery("SELECT * from zamowienia where status like 'w trakcie dostarczania' AND pozycja=1");
					int id=0, kod=0;
					if(!rs.first()) out.write("Brak elementów do zmiany!<br>");
					else{
						rs.previous();
						out.write("Nowe paczki będące dopiero co nadane:<br/><br/>");
						out.write("<table style='border: 1px solid;text-align:center'>");
						out.write("<tr bgcolor='#AAAAAA' ><td style='border: 1px solid;' width=150px; >ID_zamówienia</td><td style='border: 1px solid;' width=150px;>ID_paczki</td><td style='border: 1px solid;' width=150px;>ID_kuriera</td><td style='border: 1px solid;' width=150px;>Pozycja</td><td style='border: 1px solid;' width=150px;>Status</td><td style='border: 1px solid;' width=150px;>Uwagi</td>");
						while(rs.next()){
							  out.write("<tr>");
							  out.write("<td style='border: 1px solid;'>"+rs.getInt("id_zamowienia")+"</td>");
							  out.write("<td style='border: 1px solid;'>"+rs.getInt("id_paczki")+"</td>");
							  zamowienia.add(rs.getInt("id_zamowienia"));
							  zamowienia.add(rs.getInt("id_paczki"));
							  if(rs.getInt("id_kuriera")==0) out.write("<td style='border: 1px solid;'>nieokreślone</td>");
							  else out.write("<td style='border: 1px solid;' onclick=kurier();>"+rs.getInt("id_kuriera")+"</td>");
							  if(rs.getInt("pozycja")==0) out.write("<td style='border: 1px solid;'>nieokreślona</td>");
							  else out.write("<td style='border: 1px solid;'>"+rs.getInt("pozycja")+"</td>");
							  out.write("<td style='border: 1px solid;'>"+rs.getString("status")+"</td>");
							  if(rs.getString("uwagi")==null) out.write("<td style='border: 1px solid;'>brak</td>");
							  else out.write("<td style='border: 1px solid;'>"+rs.getString("uwagi")+"</td>");
							  out.write("</tr>");					  
						}	
						out.write("</table>");
						for(i=1;i<zamowienia.size();i+=2){
							rs = stmt.executeQuery("SELECT kod2 from paczki where id_paczki='"+zamowienia.get(i)+"';");
							while(rs.next()){
								kod=Integer.parseInt(rs.getString("kod2").substring(0,2));
							}
							rs = stmt.executeQuery("SELECT id from oddzialy where '"+kod+"'>=kod1 AND '"+kod+"'<=kod2");
							while(rs.next()){
								id=rs.getInt("id");
							}
							query = stmt.executeUpdate("UPDATE `kurier`.`zamowienia` SET `pozycja` = '"+id+"',`status`='oczekiwanie na dostarczenie' WHERE `id_zamowienia`= '"+zamowienia.get(i-1)+"';");
						}	
						out.write("</br></br>Dokonano zmian:</br>");
						out.write("<table style='border: 1px solid;text-align:center'>");	
						out.write("<tr bgcolor='#AAAAAA' ><td style='border: 1px solid;' width=150px; >ID_zamówienia</td><td style='border: 1px solid;' width=150px;>ID_paczki</td><td style='border: 1px solid;' width=150px;>ID_kuriera</td><td style='border: 1px solid;' width=150px;>Pozycja</td><td style='border: 1px solid;' width=150px;>Status</td><td style='border: 1px solid;' width=150px;>Uwagi</td>");
						for(i=0;i<zamowienia.size();i+=2){
							rs = stmt.executeQuery("SELECT * from zamowienia where id_zamowienia='"+zamowienia.get(i)+"';");
							while(rs.next()){
								out.write("<tr>");
								out.write("<td style='border: 1px solid;'>"+rs.getInt("id_zamowienia")+"</td>");
								out.write("<td style='border: 1px solid;'>"+rs.getInt("id_paczki")+"</td>");
								if(rs.getInt("id_kuriera")==0) out.write("<td style='border: 1px solid;'>nieokreślone</td>");
								else out.write("<td style='border: 1px solid;' onclick=kurier();>"+rs.getInt("id_kuriera")+"</td>");
								if(rs.getInt("pozycja")==0) out.write("<td style='border: 1px solid;'>nieokreślona</td>");
								else out.write("<td style='border: 1px solid;'>"+rs.getInt("pozycja")+"</td>");
								out.write("<td style='border: 1px solid;'>"+rs.getString("status")+"</td>");
								if(rs.getString("uwagi")==null) out.write("<td style='border: 1px solid;'>brak</td>");
								else out.write("<td style='border: 1px solid;'>"+rs.getString("uwagi")+"</td>");
								out.write("</tr>");
							}						
						}
						out.write("</table>");
				}	  
			} catch (SQLException e) {
				out.write("Wystąpił błąd:<br/>");
				out.write(e.toString());
				e.printStackTrace();
			}
		}
		else {
			out.write("Nie masz uprawnień do oglądania tej strony. Wróć na stronę główną: <a href=index.jsp>Strona główna</a>");
		}
	}

}
